package com.atomcorp.servicio;

import com.atomcorp.modelo.Cliente;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;

/**
 *
 * @author Harold
 */
public class ClienteServicio {

    public ObservableList<Cliente> listarClientes() {        
        ObservableList<Cliente> data = FXCollections.observableArrayList();
        try {
            if (Conexion.getConection() != null) {
                String sql = "SELECT * FROM cliente WHERE estado = 1 ORDER BY apellidos";
                Statement stm = Conexion.getConection().createStatement();
                ResultSet rs = stm.executeQuery(sql);
                while (rs.next()) {
                    data.add(new Cliente(rs.getLong("ID"), rs.getString("IDENTIFICACION"), rs.getString("APELLIDOS"), rs.getString("NOMBRES"),
                            rs.getBoolean("RUC_CEDULA"), rs.getString("DIRECCION"), rs.getString("TELEFONO"), rs.getBoolean("DISCAPACIDAD"),
                            rs.getBoolean("TERCERA_EDAD"), rs.getBoolean("ESTADO")));
                }
                rs.close();
                Conexion.getConection().close();
                return data;
            }
        } catch (SQLException e) {
            Logger.getLogger(ClienteServicio.class.getName()).log(Level.SEVERE, null, e);
        }
        return null;
    }

    public ObservableList<Cliente> obtenerClientePorCriterio(String criterio, String valor) {
        ObservableList<Cliente> data = FXCollections.observableArrayList();
        try {
            if (Conexion.getConection() != null) {
                String sql = "SELECT * FROM cliente WHERE " + criterio + " = '" + valor + "' AND estado = 1";
                Statement stm = Conexion.getConection().createStatement();
                ResultSet rs = stm.executeQuery(sql);
                while (rs.next()) {
                    data.add(new Cliente(rs.getLong("ID"), rs.getString("IDENTIFICACION"), rs.getString("APELLIDOS"), rs.getString("NOMBRES"),
                            rs.getBoolean("RUC_CEDULA"), rs.getString("DIRECCION"), rs.getString("TELEFONO"), rs.getBoolean("DISCAPACIDAD"),
                            rs.getBoolean("TERCERA_EDAD"), rs.getBoolean("ESTADO")));
                }
                rs.close();
                Conexion.getConection().close();
                return data;
            }
        } catch (SQLException e) {
            Logger.getLogger(ClienteServicio.class.getName()).log(Level.SEVERE, null, e);
        }
        return null;
    }

    public void ingresarCliente(Cliente cliente) {
        try {
            if (Conexion.getConection() != null) {
                String sql = " INSERT INTO cliente "
                        + " (IDENTIFICACION, APELLIDOS, NOMBRES, RUC_CEDULA, DIRECCION, TELEFONO, DISCAPACIDAD, TERCERA_EDAD, ESTADO) VALUES (?,?,?,?,?,?,?,?,?) ";
                Statement stm = Conexion.getConection().createStatement();
                PreparedStatement prep = Conexion.getConection().prepareStatement(sql);
                prep.setString(1, cliente.getIdentificacion());
                prep.setString(2, cliente.getApellidos());
                prep.setString(3, cliente.getNombres());
                prep.setBoolean(4, cliente.getRucCedula());
                prep.setString(5, cliente.getDireccion());
                prep.setString(6, cliente.getTelefono());
                prep.setBoolean(7, cliente.getDiscapacidad());
                prep.setBoolean(8, cliente.getTerceraEdad());
                prep.setBoolean(9, cliente.getEstado());
                prep.addBatch();
                prep.executeBatch();
                Conexion.getConection().setAutoCommit(true);
                prep.close();
                Conexion.getConection().close();
            }
        } catch (SQLException e) {
            Logger.getLogger(ClienteServicio.class.getName()).log(Level.SEVERE, null, e);
        }
    }

    public void editarCliente(Cliente cliente) {
        try {
            if (Conexion.getConection() != null) {
                String sql = " UPDATE cliente "
                        + " SET IDENTIFICACION = ?, APELLIDOS = ?, NOMBRES = ?, RUC_CEDULA = ?, DIRECCION = ?, TELEFONO = ?, DISCAPACIDAD = ?, TERCERA_EDAD = ?, ESTADO = ? "
                        + " WHERE ID = ?";
                Statement stm = Conexion.getConection().createStatement();
                PreparedStatement prep = Conexion.getConection().prepareStatement(sql);
                prep.setString(1, cliente.getIdentificacion());
                prep.setString(2, cliente.getApellidos());
                prep.setString(3, cliente.getNombres());
                prep.setBoolean(4, cliente.getRucCedula());
                prep.setString(5, cliente.getDireccion());
                prep.setString(6, cliente.getTelefono());
                prep.setBoolean(7, cliente.getDiscapacidad());
                prep.setBoolean(8, cliente.getTerceraEdad());
                prep.setBoolean(9, cliente.getEstado());
                prep.setLong(10, cliente.getId());
                prep.addBatch();
                prep.executeBatch();
                Conexion.getConection().setAutoCommit(true);
                prep.close();
                Conexion.getConection().close();
            }
        } catch (SQLException e) {
            Logger.getLogger(ClienteServicio.class.getName()).log(Level.SEVERE, null, e);
        }
    }

    public boolean eliminarCliente(Long id) {
        boolean ok = false;
        try {
            if (Conexion.getConection() != null) {
                String sql = " UPDATE cliente "
                        + " SET ESTADO = 0 WHERE ID = ? ";
                Statement stm = Conexion.getConection().createStatement();
                PreparedStatement prep = Conexion.getConection().prepareStatement(sql);
                prep.setLong(1, id);
                prep.addBatch();
                prep.executeBatch();
                Conexion.getConection().setAutoCommit(true);
                ok = true;
                prep.close();
                Conexion.getConection().close();
            }
        } catch (SQLException e) {
            Logger.getLogger(ClienteServicio.class.getName()).log(Level.SEVERE, null, e);
        }
        return ok;
    }
}
